Desktop/Copy of GPS_TRACE/SRC/GSMParser.c

Go to the documentation of this file.
00001 #include <string.h>
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <avr/interrupt.h>
00005 #include <avr/signal.h>
00006 #include "lcd.h"
00007 #include "GSMParser.h"
00008 
00009 int count;
00010 int fora = 0;
00011 
00012 void InitGSMParser()
00013 {
00014         GSMstate=0;
00015         GSM_CMD_count=0;
00016         GSM_COMMAND_count=0;
00017         count=0;
00018 }
00019 void GSMFeedBuffer (char pdata)
00020 {
00021         GSMdata=pdata;
00022         ProcessGSM();
00023 }
00024 
00025 int ProcessGSMCOM()
00026 {
00027         if (GSM_CMD_count < 3)
00028         {
00029                 GSM_CMD[GSM_CMD_count]=GSMdata;
00030                 GSM_CMD_count++;
00031                 return 0;
00032         }
00033         if (GSM_CMD_count == 3)
00034         {
00035                 GSM_CMD[GSM_CMD_count]=GSMdata;
00036                 GSM_CMD_count=0;
00037                 return 1;
00038         }
00039         return -1;
00040 }
00041 
00042 int ProcessGSMLEX()
00043 {
00044         if (GSM_COMMAND_count < 20)
00045         {
00046                 GSM_COMMAND[GSM_COMMAND_count]=GSMdata;
00047                 GSM_COMMAND_count++;
00048                 return 0;
00049         }
00050         if (GSM_COMMAND_count == 20)
00051         {
00052                 GSM_COMMAND[GSM_COMMAND_count]=GSMdata;
00053                 GSM_COMMAND_count=0;
00054                 return 1;
00055         }
00056         return -1;
00057 }
00058 
00059 void ProcessGSM()
00060 {
00061         switch (GSMstate)
00062         {
00063                 case 0: 
00064                         if (GSMdata=='+')
00065                         {
00066                                 GSMstate=3;
00067                                 //lcd_gotoxy(0,0);
00068                         }
00069                 break;
00070                 case 1:
00071                         if (ProcessGSMCOM()==1)
00072                         {
00073                                 GSMstate=2;
00074                         }
00075                 case 2:
00076                 if (GSM_CMD[1]=='C'&&GSM_CMD[1]=='L'&&GSM_CMD[1]=='I'&&GSM_CMD[1]=='P'){
00077                         GSMstate=3;}
00078                 break;
00079                 case 3:
00080                         lcd_gotoxy(0,2);
00081                         lcd_puts("RING");
00082                         if (ProcessGSMLEX()==1)
00083                         {
00084                         cli();  
00085                                 lcd_gotoxy(0,4);
00086                                         GSMstate=0;
00087                         sei();
00088                         if (GSM_COMMAND[7]=='+')
00089                         {
00090                                 //phone number detected send SMS now !
00091                                 ReportPosition();
00092                         }
00093                         }
00094 
00095                 break;
00096                 default: GSMstate=0;
00097         }
00098 }
00099 

Generated on Fri Aug 17 13:50:54 2007 for GPS TRACE by  doxygen 1.5.3